﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Collections;
using DTO;
namespace DAO
{
    public class CPHIEUTHUEDAO : AbstractDao
    {
        //Hàm lấy thông tin 1 phiếu thuê phòng bất kỳ
        public static CPHIEUTHUEDTO LayThongTinPhieuThueTheoPhong(int MaPhong, DateTime NgayBatDau)
        {
            CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
            OleDbConnection cn = new OleDbConnection();
            //and MaPhong=" + MaPhong.ToString()+" and NgayBatDau="+NgayBatDau.ToString()
            cn = CPHIEUTHUEDAO.ConnectionData();
            String strSQL = "Select * From PHIEUTHUE where MaPhong=" + MaPhong + " and NgayBatDau='" + NgayBatDau.ToString("MM/dd/yyyy hh:mm:ss tt") + "'";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
                phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
                phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
                phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
                if (myReader[4].ToString()!="")
                phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
                phieuthueDto.MaTiepTan = int.Parse(myReader[5].ToString());
            }
            myReader.Close();
            cn.Close();
            return phieuthueDto;
        }
        //Hàm lấy thông tin 1 phiếu thuê phòng bất kỳ
        public static CPHIEUTHUEDTO LayThongTinPhieuThue(int MaPhieuThue)
        {
            CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CPHIEUTHUEDAO.ConnectionData();
            String strSQL = "Select * From PHIEUTHUE where MaPhieuThue=" + MaPhieuThue.ToString();
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
                phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
                phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
                phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
                //phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
                phieuthueDto.MaTiepTan = int.Parse(myReader[4].ToString());
            }
            myReader.Close();
            cn.Close();
            return phieuthueDto;
        }
        ////Hàm lấy danh sách các phiếu thuê phòng
        //public static List<CPHIEUTHUEDTO> LayDanhSachPhieuThue()
        //{
        //    List<CPHIEUTHUEDTO> ds = new List<CPHIEUTHUEDTO>();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    String strSQL = "Select * From PHIEUTHUE";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
        //        phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
        //        phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
        //        phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
        //        phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
        //        phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
        //        phieuthueDto.MaTiepTan = int.Parse(myReader[5].ToString());
        //        ds.Add(phieuthueDto);
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return ds;
        //}

        //// Hàm lấy danh sách tất cả các phiếu thuê đã đánh dấu xóa dùng để xử lý
        //public static List<CPHIEUTHUEDTO> LayDanhSachPhieuThueDaDanhDauXoa()
        //{
        //    List<CPHIEUTHUEDTO> ds = new List<CPHIEUTHUEDTO>();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    String strSQL = "Select * From PHIEUTHUE where TinhTrang=true";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
        //        phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
        //        phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
        //        phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
        //        phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
        //        phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
        //        phieuthueDto.MaTiepTan = int.Parse(myReader[5].ToString());
        //        ds.Add(phieuthueDto);
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return ds;
        //}
        //// Hàm lấy danh sách tất cả các phiếu thuê chưa đánh dấu xóa dùng để xử lý
        //public static List<CPHIEUTHUEDTO> LayDanhSachPhieuThueChuaDanhDauXoa()
        //{
        //    List<CPHIEUTHUEDTO> ds = new List<CPHIEUTHUEDTO>();
        //    OleDbConnection cn = new OleDbConnection();
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    String strSQL = "Select * From PHIEUTHUE where TinhTrang=false";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    OleDbDataReader myReader = cmd.ExecuteReader();
        //    while (myReader.Read())
        //    {
        //        CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
        //        phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
        //        phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
        //        phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
        //        phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
        //        phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
        //        phieuthueDto.MaTiepTan = int.Parse(myReader[5].ToString());
        //        ds.Add(phieuthueDto);
        //    }
        //    myReader.Close();
        //    cn.Close();
        //    return ds;
        //}
        ////Hàm lấy toàn bộ phiếu thuê trong csdl đổ vào 1 bảng chỉ hiện ra trên giao diện nhưng không dùg xử lý được
        //public static DataTable LayBang()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "Select * From PHIEUTHUE";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm kết bảng phiếu thuê, người dùng và bảng phòng, lấy 1 số thông tin của tất cả phiếu thuê
        ////đổ vào vào 1 bảng chỉ hiện ra trên giao diện, không dùng để xử lý
        //public static DataTable LayBangPhieuThue()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "SELECT PHIEUTHUE.NgayBatDau, PHIEUTHUE.TinhTrang, PHONG.TenPhong, NGUOIDUNG.TenNguoiDung FROM ((PHIEUTHUE INNER JOIN PHONG ON PHIEUTHUE.MaPhong = PHONG.MaPhong) INNER JOIN NGUOIDUNG ON PHIEUTHUE.MaTiepTan = NGUOIDUNG.MaNguoiDung)";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm kết bảng phiếu thuê, người dùng và bảng phòng.Lấy ra một số thông tin các phiếu thuê đã đánh dấu xóa 
        //public static DataTable LayBangPhieuThueDaDanhDauXoa()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "SELECT PHIEUTHUE.NgayBatDau, PHIEUTHUE.TinhTrang, PHONG.TenPhong, NGUOIDUNG.TenNguoiDung FROM ((PHIEUTHUE INNER JOIN PHONG ON PHIEUTHUE.MaPhong = PHONG.MaPhong) INNER JOIN NGUOIDUNG ON PHIEUTHUE.MaTiepTan = NGUOIDUNG.MaNguoiDung) where PHIEUTHUE.TinhTrang=true";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();
        //    return dt;
        //}
        ////Hàm kết bảng phiếu thuê, người dùng và bảng phòng.Lấy ra một số thông tin các phiếu thuê chưa đánh dấu xóa 
        //public static DataTable LayBangPhieuThueChuaDanhDauXoa()
        //{
        //    DataTable dt = new DataTable();
        //    OleDbConnection cn;
        //    //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    //B3: Tao chuoi strSQL thao tac CSDL
        //    String strSQL;
        //    strSQL = "SELECT PHIEUTHUE.NgayBatDau, PHIEUTHUE.TinhTrang, PHONG.TenPhong, NGUOIDUNG.TenNguoiDung FROM ((PHIEUTHUE INNER JOIN PHONG ON PHIEUTHUE.MaPhong = PHONG.MaPhong) INNER JOIN NGUOIDUNG ON PHIEUTHUE.MaTiepTan = NGUOIDUNG.MaNguoiDung) where PHIEUTHUE.TinhTrang=false";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);
        //    da.Fill(dt);
        //    //B5: Dong ket noi CSDL
        //    cn.Close();

        //    return dt;
        //}
        //Thêm phiếu thuê
        public void ThemPhieuThue(CPHIEUTHUEDTO phieuthueDto)
        {
            OleDbConnection cn;
            //B1 & B2: Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
            cn = CPHIEUTHUEDAO.ConnectionData();
            String strSQL = "INSERT INTO PHIEUTHUE (NgayBatDau, TinhTrang, MaPhong, MaHoaDon, MaTiepTan)VALUES (?,?,?,NULL,?)";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            cmd.Parameters.Add("@NgayBatDau ", OleDbType.Char);
            cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
            cmd.Parameters.Add("@MaPhong", OleDbType.Integer);
            //cmd.Parameters.Add("@MaHoaDon", OleDbType.Integer);
            cmd.Parameters.Add("@MaTiepTan", OleDbType.Integer);
            cmd.Parameters[0].Value = phieuthueDto.NgayBatDau.ToString("MM/dd/yyyy hh:mm:ss tt");
            cmd.Parameters[1].Value = phieuthueDto.TinhTrang;
            cmd.Parameters[2].Value = phieuthueDto.MaPhong;
            //cmd.Parameters[3].Value = null;
            cmd.Parameters[3].Value = phieuthueDto.MaTiepTan;
            cmd.ExecuteNonQuery();
            //strSQL = "Select @@IDENTITY";
            ////cmd = new OleDbCommand(strSQL, cn);
            ////lndDto.MaLoaiNguoiDung = (int)cmd.ExecuteScalar();
            cn.Close();
        }
        ////Hàm đánh dấu xóa phiếu thuê tạm thời hoặc phục hồi lại
        //public static void CapNhatTinhTrangPhieuThue(int MaPhieuThue, bool TinhTrang)
        //{
        //    OleDbConnection cn;
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    string strSQL = "UPDATE PHIEUTHUE SET TinhTrang=? WHERE (MaPhieuThue=?)";
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    cmd.Parameters.Add("@TinhTrang", OleDbType.Boolean);
        //    cmd.Parameters.Add("@MaPhieuThue", OleDbType.Integer);
        //    cmd.Parameters[0].Value = TinhTrang;
        //    cmd.Parameters[1].Value = MaPhieuThue;
        //    cmd.ExecuteNonQuery();
        //    cn.Close();
        //}
        ////Hàm xóa vĩnh viễn phiếu thuê
        //public static void XoaPhieuThue(int MaPhieuThue)
        //{
        //    //Tao chuoi ket noi, mo ket noi bang doi tuong ket noi
        //    OleDbConnection cn;
        //    cn = CPHIEUTHUEDAO.ConnectionData();
        //    // chuoi strSQL thao tac CSDL
        //    String strSQL = "DELETE FROM PHIEUTHUE WHERE MaPhieuThue=?";
        //    //B4: Thuc thi chuoi strSQL
        //    OleDbCommand cmd = new OleDbCommand(strSQL, cn);
        //    //add vao cmd để tránh bị sai sót khi gán thuộc tính bằng 1 giá trị cụ thể
        //    cmd.Parameters.Add("@MaPhieuThue", OleDbType.Integer);
        //    cmd.Parameters[0].Value = MaPhieuThue;
        //    cmd.ExecuteNonQuery();
        //    //đóng kết nối
        //    cn.Close();
        //}
        //có sửa
        public static CPHIEUTHUEDTO LayPhieuThueChuaThanhToan(int maPhong)
        {
            CPHIEUTHUEDTO phieuthueDto = new CPHIEUTHUEDTO();
            OleDbConnection cn = new OleDbConnection();
            cn = CPHIEUTHUEDAO.ConnectionData();
            String strSQL = "SELECT MaPhieuThue, NgayBatDau, TinhTrang, MaPhong, MaHoaDon, MaTiepTan FROM PHIEUTHUE WHERE  (TinhTrang = false) AND (MaHoaDon IS NULL) AND (MaPhong = " + maPhong + ")";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            OleDbDataReader myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                phieuthueDto.MaPhieuThue = int.Parse(myReader[0].ToString());
                phieuthueDto.NgayBatDau = DateTime.Parse(myReader[1].ToString());
                phieuthueDto.TinhTrang = bool.Parse(myReader[2].ToString());
                phieuthueDto.MaPhong = int.Parse(myReader[3].ToString());
                if (myReader[4].ToString() != "")
                    phieuthueDto.MaHoaDon = int.Parse(myReader[4].ToString());
                phieuthueDto.MaTiepTan = int.Parse(myReader[5].ToString());
            }
            myReader.Close();
            cn.Close();
            return phieuthueDto;
        }
     
        public static DataTable TraCuuPhieuThueTheoYeuCau(string hoaDon,string tenPhong,string tenLoaiPhong,DateTime ngayLap,string tenTiepTan,string sapXep, string thuTu)
        {
            DataTable dt = new DataTable();
            OleDbConnection cn;
            cn = CKHACHTHUEDAO.ConnectionData();
            string sql = "SELECT * FROM (((NGUOIDUNG INNER JOIN PHIEUTHUE ON NGUOIDUNG.MaNguoiDung = PHIEUTHUE.MaTiepTan) INNER JOIN PHONG ON PHIEUTHUE.MaPhong = PHONG.MaPhong) INNER JOIN LOAIPHONG ON PHONG.MaLoaiPhong = LOAIPHONG.MaLoaiPhong) where PHIEUTHUE.TinhTrang=false and 1";
            if (hoaDon == "CoHoaDon")
            {
                sql += "and PHIEUTHUE.MaHoaDon is not NULL";
            }
            if (hoaDon == "KhongHoaDon")
            {
                sql += " and PHIEUTHUE.MaHoaDon is NULL";
            }
            if (tenPhong != "")
            {
                sql += " and PHONG.TenPhong like '%" + tenPhong + "%'";
            }
            if (tenLoaiPhong != "")
            {
                sql += " and LOAIPHONG.TenLoaiPhong like '%" + tenLoaiPhong + "%'";
            }
            //sql += " and NgayBatDau= '" + ngayLap+"'";
            if (tenTiepTan != "")
            {
                sql += " and NGUOIDUNG.TenNguoiDung like '%" + tenTiepTan + "%'";
            }
            if (sapXep == "Tự động")
            {
                sql += " order by MaPhieuThue";
            }
            if (sapXep == "Tên Phòng")
            {
                sql += " order by PHONG.TenPhong";
            }
            if (sapXep == "Tên loại phòng")
            {
                sql += " order by LOAIPHONG.TenLoaiPhonG";
            }
            if (sapXep == "Ngày lập")
            {
                sql += " order by  PHIEUTHUE.NgayBatDau";
            }
            if (sapXep == "Tiếp tân lập")
            {
                sql += " order by NGUOIDUNG.TenNguoiDung";
            }
            if (thuTu == "Tăng")
            {
                sql += " asc ";
            }
            if (thuTu == "Giảm")
            {
                sql += " desc ";
            }
            OleDbDataAdapter da = new OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            cn.Close();
            return dt;
        }
        public static void CapNhatPhieuThueDaThanhToan(int maPhieuThue, int maHoaDon)
        {
            OleDbConnection cn;
            cn = CPHIEUTHUEDAO.ConnectionData();
            string strSQL = "UPDATE PHIEUTHUE SET  MaHoaDon =" + maHoaDon + " WHERE  (MaPhieuThue = " + maPhieuThue + ")";
            OleDbCommand cmd = new OleDbCommand(strSQL, cn);
            //cmd.Parameters.Add("@MaHoaDon", OleDbType.Integer);
            //cmd.Parameters.Add("@MaPhieuThue", OleDbType.Integer);
            //cmd.Parameters[0].Value = maHoaDon;
            //cmd.Parameters[1].Value = maPhieuThue;
            cmd.ExecuteNonQuery();
            cn.Close();
        }
    }
}
